﻿// Copyright 2006 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
document.createElement("canvas").getContext || (function () {
    var s = Math, j = s.round, F = s.sin, G = s.cos, V = s.abs, W = s.sqrt, k = 10, v = k / 2; function X() { return this.context_ || (this.context_ = new H(this)) } var L = Array.prototype.slice; function Y(b, a) { var c = L.call(arguments, 2); return function () { return b.apply(a, c.concat(L.call(arguments))) } } var M = { init: function (b) { if (/MSIE/.test(navigator.userAgent) && !window.opera) { var a = b || document; a.createElement("canvas"); a.attachEvent("onreadystatechange", Y(this.init_, this, a)) } }, init_: function (b) {
        b.namespaces.g_vml_ ||
b.namespaces.add("g_vml_", "urn:schemas-microsoft-com:vml", "#default#VML"); b.namespaces.g_o_ || b.namespaces.add("g_o_", "urn:schemas-microsoft-com:office:office", "#default#VML"); if (!b.styleSheets.ex_canvas_) { var a = b.createStyleSheet(); a.owningElement.id = "ex_canvas_"; a.cssText = "canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}g_vml_\\:*{behavior:url(#default#VML)}g_o_\\:*{behavior:url(#default#VML)}" } var c = b.getElementsByTagName("canvas"), d = 0; for (; d < c.length; d++) this.initElement(c[d])
    },
        initElement: function (b) { if (!b.getContext) { b.getContext = X; b.innerHTML = ""; b.attachEvent("onpropertychange", Z); b.attachEvent("onresize", $); var a = b.attributes; if (a.width && a.width.specified) b.style.width = a.width.nodeValue + "px"; else b.width = b.clientWidth; if (a.height && a.height.specified) b.style.height = a.height.nodeValue + "px"; else b.height = b.clientHeight } return b } 
    }; function Z(b) {
        var a = b.srcElement; switch (b.propertyName) {
            case "width": a.style.width = a.attributes.width.nodeValue + "px"; a.getContext().clearRect();
                break; case "height": a.style.height = a.attributes.height.nodeValue + "px"; a.getContext().clearRect(); break
        } 
    } function $(b) { var a = b.srcElement; if (a.firstChild) { a.firstChild.style.width = a.clientWidth + "px"; a.firstChild.style.height = a.clientHeight + "px" } } M.init(); var N = [], B = 0; for (; B < 16; B++) { var C = 0; for (; C < 16; C++) N[B * 16 + C] = B.toString(16) + C.toString(16) } function I() { return [[1, 0, 0], [0, 1, 0], [0, 0, 1]] } function y(b, a) {
        var c = I(), d = 0; for (; d < 3; d++) {
            var f = 0; for (; f < 3; f++) {
                var h = 0, g = 0; for (; g < 3; g++) h += b[d][g] * a[g][f]; c[d][f] =
h
            } 
        } return c
    } function O(b, a) { a.fillStyle = b.fillStyle; a.lineCap = b.lineCap; a.lineJoin = b.lineJoin; a.lineWidth = b.lineWidth; a.miterLimit = b.miterLimit; a.shadowBlur = b.shadowBlur; a.shadowColor = b.shadowColor; a.shadowOffsetX = b.shadowOffsetX; a.shadowOffsetY = b.shadowOffsetY; a.strokeStyle = b.strokeStyle; a.globalAlpha = b.globalAlpha; a.arcScaleX_ = b.arcScaleX_; a.arcScaleY_ = b.arcScaleY_; a.lineScale_ = b.lineScale_ } function P(b) {
        var a, c = 1; b = String(b); if (b.substring(0, 3) == "rgb") {
            var d = b.indexOf("(", 3), f = b.indexOf(")", d +
1), h = b.substring(d + 1, f).split(","); a = "#"; var g = 0; for (; g < 3; g++) a += N[Number(h[g])]; if (h.length == 4 && b.substr(3, 1) == "a") c = h[3]
        } else a = b; return { color: a, alpha: c}
    } function aa(b) { switch (b) { case "butt": return "flat"; case "round": return "round"; case "square": default: return "square" } } function H(b) {
        this.m_ = I(); this.mStack_ = []; this.aStack_ = []; this.currentPath_ = []; this.fillStyle = this.strokeStyle = "#000"; this.lineWidth = 1; this.lineJoin = "miter"; this.lineCap = "butt"; this.miterLimit = k * 1; this.globalAlpha = 1; this.canvas = b;
        var a = b.ownerDocument.createElement("div"); a.style.width = b.clientWidth + "px"; a.style.height = b.clientHeight + "px"; a.style.overflow = "hidden"; a.style.position = "absolute"; b.appendChild(a); this.element_ = a; this.lineScale_ = this.arcScaleY_ = this.arcScaleX_ = 1
    } var i = H.prototype; i.clearRect = function () { this.element_.innerHTML = "" }; i.beginPath = function () { this.currentPath_ = [] }; i.moveTo = function (b, a) { var c = this.getCoords_(b, a); this.currentPath_.push({ type: "moveTo", x: c.x, y: c.y }); this.currentX_ = c.x; this.currentY_ = c.y };
    i.lineTo = function (b, a) { var c = this.getCoords_(b, a); this.currentPath_.push({ type: "lineTo", x: c.x, y: c.y }); this.currentX_ = c.x; this.currentY_ = c.y }; i.bezierCurveTo = function (b, a, c, d, f, h) { var g = this.getCoords_(f, h), l = this.getCoords_(b, a), e = this.getCoords_(c, d); Q(this, l, e, g) }; function Q(b, a, c, d) { b.currentPath_.push({ type: "bezierCurveTo", cp1x: a.x, cp1y: a.y, cp2x: c.x, cp2y: c.y, x: d.x, y: d.y }); b.currentX_ = d.x; b.currentY_ = d.y } i.quadraticCurveTo = function (b, a, c, d) {
        var f = this.getCoords_(b, a), h = this.getCoords_(c, d), g = { x: this.currentX_ +
0.6666666666666666 * (f.x - this.currentX_), y: this.currentY_ + 0.6666666666666666 * (f.y - this.currentY_)
        }; Q(this, g, { x: g.x + (h.x - this.currentX_) / 3, y: g.y + (h.y - this.currentY_) / 3 }, h)
    }; i.arc = function (b, a, c, d, f, h) { c *= k; var g = h ? "at" : "wa", l = b + G(d) * c - v, e = a + F(d) * c - v, m = b + G(f) * c - v, r = a + F(f) * c - v; if (l == m && !h) l += 0.125; var n = this.getCoords_(b, a), o = this.getCoords_(l, e), q = this.getCoords_(m, r); this.currentPath_.push({ type: g, x: n.x, y: n.y, radius: c, xStart: o.x, yStart: o.y, xEnd: q.x, yEnd: q.y }) }; i.rect = function (b, a, c, d) {
        this.moveTo(b,
a); this.lineTo(b + c, a); this.lineTo(b + c, a + d); this.lineTo(b, a + d); this.closePath()
    }; i.strokeRect = function (b, a, c, d) { var f = this.currentPath_; this.beginPath(); this.moveTo(b, a); this.lineTo(b + c, a); this.lineTo(b + c, a + d); this.lineTo(b, a + d); this.closePath(); this.stroke(); this.currentPath_ = f }; i.fillRect = function (b, a, c, d) { var f = this.currentPath_; this.beginPath(); this.moveTo(b, a); this.lineTo(b + c, a); this.lineTo(b + c, a + d); this.lineTo(b, a + d); this.closePath(); this.fill(); this.currentPath_ = f }; i.createLinearGradient = function (b,
a, c, d) { var f = new D("gradient"); f.x0_ = b; f.y0_ = a; f.x1_ = c; f.y1_ = d; return f }; i.createRadialGradient = function (b, a, c, d, f, h) { var g = new D("gradientradial"); g.x0_ = b; g.y0_ = a; g.r0_ = c; g.x1_ = d; g.y1_ = f; g.r1_ = h; return g }; i.drawImage = function (b) {
    var a, c, d, f, h, g, l, e, m = b.runtimeStyle.width, r = b.runtimeStyle.height; b.runtimeStyle.width = "auto"; b.runtimeStyle.height = "auto"; var n = b.width, o = b.height; b.runtimeStyle.width = m; b.runtimeStyle.height = r; if (arguments.length == 3) { a = arguments[1]; c = arguments[2]; h = g = 0; l = d = n; e = f = o } else if (arguments.length ==
5) { a = arguments[1]; c = arguments[2]; d = arguments[3]; f = arguments[4]; h = g = 0; l = n; e = o } else if (arguments.length == 9) { h = arguments[1]; g = arguments[2]; l = arguments[3]; e = arguments[4]; a = arguments[5]; c = arguments[6]; d = arguments[7]; f = arguments[8] } else throw Error("Invalid number of arguments"); var q = this.getCoords_(a, c), t = []; t.push(" <g_vml_:group", ' coordsize="', k * 10, ",", k * 10, '"', ' coordorigin="0,0"', ' style="width:', 10, "px;height:", 10, "px;position:absolute;"); if (this.m_[0][0] != 1 || this.m_[0][1]) {
        var E = []; E.push("M11=",
this.m_[0][0], ",", "M12=", this.m_[1][0], ",", "M21=", this.m_[0][1], ",", "M22=", this.m_[1][1], ",", "Dx=", j(q.x / k), ",", "Dy=", j(q.y / k), ""); var p = q, z = this.getCoords_(a + d, c), w = this.getCoords_(a, c + f), x = this.getCoords_(a + d, c + f); p.x = s.max(p.x, z.x, w.x, x.x); p.y = s.max(p.y, z.y, w.y, x.y); t.push("padding:0 ", j(p.x / k), "px ", j(p.y / k), "px 0;filter:progid:DXImageTransform.Microsoft.Matrix(", E.join(""), ", sizingmethod='clip');")
    } else t.push("top:", j(q.y / k), "px;left:", j(q.x / k), "px;"); t.push(' ">', '<g_vml_:image src="', b.src,
'"', ' style="width:', k * d, "px;", " height:", k * f, 'px;"', ' cropleft="', h / n, '"', ' croptop="', g / o, '"', ' cropright="', (n - h - l) / n, '"', ' cropbottom="', (o - g - e) / o, '"', " />", "</g_vml_:group>"); this.element_.insertAdjacentHTML("BeforeEnd", t.join(""))
}; i.stroke = function (b) {
    var a = [], c = P(b ? this.fillStyle : this.strokeStyle), d = c.color, f = c.alpha * this.globalAlpha; a.push("<g_vml_:shape", ' filled="', !!b, '"', ' style="position:absolute;width:', 10, "px;height:", 10, 'px;"', ' coordorigin="0 0" coordsize="', k * 10, " ", k * 10, '"', ' stroked="',
!b, '"', ' path="'); var h = { x: null, y: null }, g = { x: null, y: null }, l = 0; for (; l < this.currentPath_.length; l++) {
        var e = this.currentPath_[l]; switch (e.type) {
            case "moveTo": a.push(" m ", j(e.x), ",", j(e.y)); break; case "lineTo": a.push(" l ", j(e.x), ",", j(e.y)); break; case "close": a.push(" x "); e = null; break; case "bezierCurveTo": a.push(" c ", j(e.cp1x), ",", j(e.cp1y), ",", j(e.cp2x), ",", j(e.cp2y), ",", j(e.x), ",", j(e.y)); break; case "at": case "wa": a.push(" ", e.type, " ", j(e.x - this.arcScaleX_ * e.radius), ",", j(e.y - this.arcScaleY_ * e.radius),
" ", j(e.x + this.arcScaleX_ * e.radius), ",", j(e.y + this.arcScaleY_ * e.radius), " ", j(e.xStart), ",", j(e.yStart), " ", j(e.xEnd), ",", j(e.yEnd)); break
        } if (e) { if (h.x == null || e.x < h.x) h.x = e.x; if (g.x == null || e.x > g.x) g.x = e.x; if (h.y == null || e.y < h.y) h.y = e.y; if (g.y == null || e.y > g.y) g.y = e.y } 
    } a.push(' ">'); if (b) if (typeof this.fillStyle == "object") {
        var m = this.fillStyle, r = 0, n = { x: 0, y: 0 }, o = 0, q = 1; if (m.type_ == "gradient") {
            var t = m.x1_ / this.arcScaleX_, E = m.y1_ / this.arcScaleY_, p = this.getCoords_(m.x0_ / this.arcScaleX_, m.y0_ / this.arcScaleY_),
z = this.getCoords_(t, E); r = Math.atan2(z.x - p.x, z.y - p.y) * 180 / Math.PI; if (r < 0) r += 360; if (r < 1.0E-6) r = 0
        } else { var p = this.getCoords_(m.x0_, m.y0_), w = g.x - h.x, x = g.y - h.y; n = { x: (p.x - h.x) / w, y: (p.y - h.y) / x }; w /= this.arcScaleX_ * k; x /= this.arcScaleY_ * k; var R = s.max(w, x); o = 2 * m.r0_ / R; q = 2 * m.r1_ / R - o } var u = m.colors_; u.sort(function (ba, ca) { return ba.offset - ca.offset }); var J = u.length, da = u[0].color, ea = u[J - 1].color, fa = u[0].alpha * this.globalAlpha, ga = u[J - 1].alpha * this.globalAlpha, S = [], l = 0; for (; l < J; l++) {
            var T = u[l]; S.push(T.offset * q +
o + " " + T.color)
        } a.push('<g_vml_:fill type="', m.type_, '"', ' method="none" focus="100%"', ' color="', da, '"', ' color2="', ea, '"', ' colors="', S.join(","), '"', ' opacity="', ga, '"', ' g_o_:opacity2="', fa, '"', ' angle="', r, '"', ' focusposition="', n.x, ",", n.y, '" />')
    } else a.push('<g_vml_:fill color="', d, '" opacity="', f, '" />'); else {
        var K = this.lineScale_ * this.lineWidth; if (K < 1) f *= K; a.push("<g_vml_:stroke", ' opacity="', f, '"', ' joinstyle="', this.lineJoin, '"', ' miterlimit="', this.miterLimit, '"', ' endcap="', aa(this.lineCap),
'"', ' weight="', K, 'px"', ' color="', d, '" />')
    } a.push("</g_vml_:shape>"); this.element_.insertAdjacentHTML("beforeEnd", a.join(""))
}; i.fill = function () { this.stroke(true) }; i.closePath = function () { this.currentPath_.push({ type: "close" }) }; i.getCoords_ = function (b, a) { var c = this.m_; return { x: k * (b * c[0][0] + a * c[1][0] + c[2][0]) - v, y: k * (b * c[0][1] + a * c[1][1] + c[2][1]) - v} }; i.save = function () { var b = {}; O(this, b); this.aStack_.push(b); this.mStack_.push(this.m_); this.m_ = y(I(), this.m_) }; i.restore = function () {
    O(this.aStack_.pop(),
this); this.m_ = this.mStack_.pop()
}; function ha(b) { var a = 0; for (; a < 3; a++) { var c = 0; for (; c < 2; c++) if (!isFinite(b[a][c]) || isNaN(b[a][c])) return false } return true } function A(b, a, c) { if (!!ha(a)) { b.m_ = a; if (c) b.lineScale_ = W(V(a[0][0] * a[1][1] - a[0][1] * a[1][0])) } } i.translate = function (b, a) { A(this, y([[1, 0, 0], [0, 1, 0], [b, a, 1]], this.m_), false) }; i.rotate = function (b) { var a = G(b), c = F(b); A(this, y([[a, c, 0], [-c, a, 0], [0, 0, 1]], this.m_), false) }; i.scale = function (b, a) {
    this.arcScaleX_ *= b; this.arcScaleY_ *= a; A(this, y([[b, 0, 0], [0, a,
0], [0, 0, 1]], this.m_), true)
}; i.transform = function (b, a, c, d, f, h) { A(this, y([[b, a, 0], [c, d, 0], [f, h, 1]], this.m_), true) }; i.setTransform = function (b, a, c, d, f, h) { A(this, [[b, a, 0], [c, d, 0], [f, h, 1]], true) }; i.clip = function () { }; i.arcTo = function () { }; i.createPattern = function () { return new U }; function D(b) { this.type_ = b; this.r1_ = this.y1_ = this.x1_ = this.r0_ = this.y0_ = this.x0_ = 0; this.colors_ = [] } D.prototype.addColorStop = function (b, a) { a = P(a); this.colors_.push({ offset: b, color: a.color, alpha: a.alpha }) }; function U() { } G_vmlCanvasManager =
M; CanvasRenderingContext2D = H; CanvasGradient = D; CanvasPattern = U
})();
